package org.summer.lawyer.domain.bo.spuorder;

import io.github.linpeilie.annotations.AutoMapper;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.summer.common.mybatis.core.domain.BaseEntitySearch;
import org.summer.lawyer.domain.SpuOrder;

import java.io.Serial;
import java.util.Date;

/**
 * 订单信息业务对象 spu_order
 *
 * @author summer
 * @date 2024-06-22
 */
@Schema(title ="订单信息视图对象 spu_order", description = "订单信息视图对象 spu_order")
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SpuOrder.class, reverseConvertGenerate = false)
public class SpuOrderBo extends BaseEntitySearch {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 订单ID
     */
    @Schema(title = "orderId", type = "Long", description = "订单ID")
    //@NotNull(message = "订单ID不能为空", groups = { EditGroup.class })
    private Long orderId;

    /**
     * 订单编号
     */
    @Schema(title = "orderNumber", type = "String", description = "订单编号")
    //@NotBlank(message = "订单编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String orderNumber;

    /**
     * 订单状态(Pending=待处理，Paid=已付款，Processing=处理中，Completed=已完成，Cancelled=已取消，Refunded=已退款）
     */
    @Schema(title = "orderStatus", type = "String", description = "订单状态(PENDING=待处理，Paid=已付款，Processing=处理中，Completed=已完成，Cancelled=已取消，Refunded=已退款）")
    //@NotBlank(message = "订单状态(PENDING=待处理，Paid=已付款，Processing=处理中，Completed=已完成，Cancelled=已取消，Refunded=已退款）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String orderStatus;

    /**
     * 服务类型
     */
    @Schema(title = "serviceType", type = "String", description = "服务类型")
    //@NotBlank(message = "服务类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String serviceType;

    /**
     * 联系电话
     */
    @Schema(title = "contactPhone", type = "String", description = "联系电话")
    //@NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
    private String contactPhone;

    /**
     * 下单用户ID
     */
    @Schema(title = "userId", type = "Long", description = "下单用户ID")
    //@NotNull(message = "下单用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long userId;

    /**
     * 下单用户姓名
     */
    @Schema(title = "userName", type = "String", description = "下单用户姓名")
    //@NotBlank(message = "下单用户姓名不能为空", groups = { AddGroup.class, EditGroup.class })
    private String userName;

    /**
     * 下单时间
     */
    @Schema(title = "orderTime", type = "Date", description = "下单时间")
    //@NotNull(message = "下单时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date orderTime;

    /**
     * 订单金额（单位分）
     */
    @Schema(title = "amount", type = "Long", description = "订单金额（单位分）")
    //@NotNull(message = "订单金额（单位分）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long amount;

    /**
     * 支付方式 (Alipay支付宝，WeChatPay微信, CreditCard信用卡, DebitCard借记卡，BankTransfer银行转帐)
     */
    @Schema(title = "paymentMethod", type = "String", description = "支付方式 (Alipay支付宝，WeChatPay微信, CreditCard信用卡, DebitCard借记卡，BankTransfer银行转帐)")
    //@NotBlank(message = "支付方式 (Alipay支付宝，WeChatPay微信, CreditCard信用卡, DebitCard借记卡，BankTransfer银行转帐)不能为空", groups = { AddGroup.class, EditGroup.class })
    private String paymentMethod;

    /**
     * 支付金额（单位分）
     */
    @Schema(title = "paymentAmount", type = "Long", description = "支付金额（单位分）")
    //@NotNull(message = "支付金额（单位分）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long paymentAmount;

    /**
     * 支付时间
     */
    @Schema(title = "paymentTime", type = "Date", description = "支付时间")
    //@NotNull(message = "支付时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date paymentTime;

    /**
     * 完成时间
     */
    @Schema(title = "completionTime", type = "Date", description = "完成时间")
    //@NotNull(message = "完成时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date completionTime;

    /**
     * 交易ID
     */
    @Schema(title = "transactionId", type = "String", description = "交易ID")
    //@NotBlank(message = "交易ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private String transactionId;

    /**
     * 评价状态(0待评价，已评价）
     */
    @Schema(title = "review", type = "String", description = "评价状态(0待评价，已评价）")
    //@NotBlank(message = "评价状态(0待评价，已评价）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String review;

    /**
     * 备注
     */
    @Schema(title = "orderRemark", type = "String", description = "备注")
    //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
    private String orderRemark;

    /**
     * 是否已经支付 (0 未支付，1已支付）
     */
    @Schema(title = "payed", type = "String", description = "是否已经支付 (0 未支付，1已支付）")
    //@NotBlank(message = "是否已经支付 (0 未支付，1已支付）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String payed;

    /**
     * 取消时间
     */
    @Schema(title = "cancellationTime", type = "Date", description = "取消时间")
    //@NotNull(message = "取消时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date cancellationTime;

    /**
     * 订单关闭原因1-超时未支付 2-买家取消
     */
    @Schema(title = "closeType", type = "String", description = "订单关闭原因1-超时未支付 2-买家取消")
    //@NotBlank(message = "订单关闭原因1-超时未支付 2-买家取消不能为空", groups = { AddGroup.class, EditGroup.class })
    private String closeType;

    /**
     * 是否需要指派律师处理（0不需要，1需要）
     */
    @Schema(title = "dispatchable", type = "String", description = "是否需要指派律师处理（0不需要，1需要）")
    //@NotBlank(message = "是否需要指派律师处理（0不需要，1需要）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String dispatchable;

    /**
     * 接收文件邮箱
     */
    @Schema(title = "email", type = "String", description = "接收文件邮箱")
    private String email;

    /**
     * 律所ID
     */
    @Schema(title = "lawFirmId", type = "Long", description = "律所ID")
    private Long lawFirmId;

    /**
     * 派单编号，用于追踪的订单编号
     */
    @Schema(title = "trackingNumber", type = "String", description = "派单编号，用于追踪的订单编号")
    //@NotBlank(message = "用于追踪的订单编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String trackingNumber;

    /**
     * 是否申请完成,0未申请，1已申请
     */
    @Schema(title = "processedStatus", type = "String", description = "是否申请完成,0未申请，1已申请")
    private String processedStatus;

    /**
     * 申请完成时间
     */
    @Schema(title = "processedTime", type = "Date", description = "申请完成时间")
    private Date processedTime;
}
